/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.alanis.business;

import cl.alanis.dao.DocumentoDao;
import cl.alanis.dao.ProductoDao;
import cl.alanis.dao.StockDao;
import cl.alanis.dao.TipoDocumentoDao;
import cl.alanis.dao.impl.DocumentoDaoImpl;
import cl.alanis.dao.impl.StockDaoImpl;
import cl.alanis.dao.impl.TipoDocumentoDaoImpl;
import cl.alanis.dto.DetalleDocDto;
import cl.alanis.dto.DocumentoDto;
import cl.alanis.dto.StockDto;
import cl.alanis.exception.StockNoExisteException;
import cl.alanis.util.AlanisLog;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author Pía
 */
public class StockBusiness {
    Logger logger=AlanisLog.obtenerLogger(StockBusiness.class);
    DocumentoDao daoDocumento;
    TipoDocumentoDao daoTipoDcoumento;
    ProductoDao daoProducto;
    StockDao daoStock;
    public Integer insertarDocumento(DocumentoDto documento) throws Exception{
        daoDocumento=new DocumentoDaoImpl();
        Integer codigo = null;
        try {
            codigo=daoDocumento.obtieneCodigo();
            documento.setDocIngreso(codigo);
            daoDocumento.insertarDocumento(documento);
            
            daoDocumento.commit();
        } catch (Exception ex) {
            daoDocumento.rollback();
            logger.error("Error:"+ex.getMessage());
            throw new Exception(ex.getMessage());
        }
        return codigo;
    }
    
    public List obtenerTipoDoc() throws Exception{
        daoTipoDcoumento=new TipoDocumentoDaoImpl();
        List lista;
        try {
            lista=daoTipoDcoumento.obtenerTipos();
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception(ex.getMessage());
        }
        
        return lista;
    }
    
    public StockDto obtenerStock(StockDto stock) throws StockNoExisteException,Exception{
        daoStock=new StockDaoImpl();
        StockDto retorno;
        try {
            retorno = daoStock.obtenerStock(stock);
        } catch (StockNoExisteException ex) {
            logger.debug("Error:"+ex.getMessage());
            throw new StockNoExisteException(ex.getMessage());
        } catch (Exception ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception(ex.getMessage());
        }
        return retorno;
    }

    public void insertarStocks(List lista,DocumentoDto documento) throws Exception {
        
        StockDto stock;
        daoStock=new StockDaoImpl();
        daoDocumento = new DocumentoDaoImpl();
        Iterator iterador=lista.iterator();
        Long fecha=(new Date()).getTime();
        try{
            Integer codigoDoc=daoDocumento.obtieneCodigo();
            documento.setDocIngreso(codigoDoc);            
            daoDocumento.insertarDocumento(documento);  
            while(iterador.hasNext()){            
                DetalleDocDto detalleDoc=(DetalleDocDto) iterador.next();
                detalleDoc.setCodDocumento(codigoDoc);
                daoDocumento.insertarDetalleDocumento(detalleDoc);
                for(int i=0;i<detalleDoc.getCantidad().intValue();i++){
                    stock=new StockDto();
                    stock.setCodIngreso(codigoDoc);
                    stock.setCodProducto(detalleDoc.getCodigoProducto());
                    stock.setFechaIngreso(fecha);
                    daoStock.insertarStock(stock);
                }
                
            }
        
        daoStock.commit();
        }catch(Exception ex){
            daoStock.rollback();
            logger.error("Error:"+ex.getMessage());
            throw ex;
        }
        
    }

    
}
